/*
 * Copyright 北京航空航天大学  @ 2015 版权所有
 */
package com.buaa.edu.leetcode.algorithm.dp;

/**
 * <p>编辑距离</p>
 * @author towan
 * @email tongwenzide@163.com
 * @time 2015年5月30日
 */
public class EditDistance {

    public int minDistance(String word1, String word2) {
        int len1 = word1.length();
        int len2 = word2.length();
        if(len1==0){
            return len2;
        }
        if(len2==0){
            return len1;
        }
        
        int dp[][] = new int[len1+1][len2+1];
        //初始化边界，只有word1的字符
        for(int i=0;i<=len1;i++){
            dp[i][0] = i;
        }
        //初始化边界只有word2的字符
        for(int j=0;j<=len2;j++){
            dp[0][j] = j;
        }
        
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                if(word1.charAt(i-1) == word2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1];
                }else{
                    dp[i][j] = 1+Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]));
                }
            }
        }
        
        return dp[len1][len2];
    }
}
